package com.wanmait.recycle.redis.dao;

import java.util.Set;

public interface RedisPraiseAnswerDao {

	//类型为set，key为：userLike:1:userinfoId:set  用户的id
	//哪个回答被哪个用户点赞
	void addPraiseAnswer(Integer answerId,Integer userinfoId);
	//某个用户是否对某个回答点过赞
	boolean isPraise(Integer answerId,Integer userinfoId);
	//取消点赞
	void removePraiseAnswer(Integer answerId,Integer userinfoId);
	
	
	
	//类型为String ，文章的点赞数量 userLike:1:count
	//设置点赞数量
	void setCount(Integer answerId,Integer praiseCount);
	//点赞数量加1
	void  increaseCount(Integer answerId);
	//点赞数量减1
	void decreaseCount(Integer answerId);
	//获得点赞数量
	int getCount(Integer answerId);
	
	
	//如果数据库中数据量特别大，之前没用redis，或者redis数据清空
	//不能一下把所有回答都初始化，在调用findAll findById等方法时再初始化
	//类型为set，key为：userLike:init:set  回答的id
	//把所有被数据库的数据初始化过的回答id存放到该set中
	void addInit(Integer answerId);
	//判断是否已经初始化过
	boolean hasInit(Integer answerId);

	
	//队列实现和数据库同步,类型为list ，key为userLike:list 
	//userLike:list {“questionId”:1,”userinfoId”:1,delete:1,inputTime:毫秒数}
	//delete为1表示取消点赞，为0表示点赞
	//每次点赞或者取消点赞时同时向队列中push消息，做定时器从队列中取出消息解析后批量操作数据库，批量添加和批量删除
	//添加消息
	void leftPush(String message);
	//取出消息
	String rightPop();
	
	//最近操作了哪些回答,类型为set，key为userLike:update:set 存放回答id
	//这个是为了每次利用定时器和数据库同步点赞数量时，不用同步所有的redis中的数据，
	//每次同步时只取出该键中的回答id同步点赞数量，同步后清空该键。
	//每次点赞或者取消点赞都向该键中设置回答id
	void addUpdate(Integer answerId);
	//获得上次定时器同步点赞数量后被操作（点赞 取消点赞）的所有的回答id
	Set<Integer> getUpdate();
	/*同步后清空键"PraiseAnswer:update:set"中的值*/
	void removeUpdate();
	
	
	
	
}
